- 网络通信起源
- 起源于战争,服务于军事
- 计算机之间相互传递信息
- 网络协议-七层协议
- 协议: 保证相互通信的一套规章制度,操作,或者流程
- 分层:每一层按照协议做自己的事情,然后把结果向邻居层次介绍
- 七层:学术模型
- 应用层
- 表示层
- 会话层
- 网络层
- 数据链路层
- 物理层
- 实际使用是四层协议
- 协议族:一组功能相似的协议
- TCP/IP协议族
- TCP(TransmissionControlProtocal)
- 基于链接的,每次传输数据都要建立链接
- 建立链接需要消耗资源,带宽等,需要消耗时间
- 传输数据安全,可靠,数据传输有序
- UDP(UserDatagramProtocal)
- 无连接
- 安全性差,数据接受无顺序
- 传输消耗带宽小,没有专门链接需要消耗资源
# 2. socket编程
- socket:套接字,在网络里边,通过ip地址和端口进行通信的一种机制
- IP地址:用于在互联网上唯一表示一台机器的一个由数字构成的串,由四个字段构成
- IPv4, IPv6
比如: 192.168.1.1, 26.34.123.87
- 端口: 进行应用程序身份鉴定的一个数字
- 65535以下都可以
- 一般1000以下不推荐开发者自行使用
- TCP/UDP编程
- UDP编程
- 无连接
- 客户端(Client) 和 服务器端(Server)
- Server端流程
1. 建立socket,socket是负责具体通信的一个实例
2. 绑定,为创建的socket指派固定的端口和ip地址
3. 接受对方发送内容
4. 给对方发送反馈,此步骤为非必须步骤
- Client端流程
1. 建立通信的socket
2. 发送内容到指定服务器
3. 接受服务器给定的反馈内容
- 案例01是服务器,02是客户端
- 需要注意的是,发送的消息是经过编码处理后的,即只能发送bytes
- 要想得到bytes格式的信息,需要用到str.encode
- 如果有bytes格式信息,想得到字符串,需要用到bytes.decode
- 服务器程序要求永久运行,需要用死循环实现
- 参见案例03
- TCP编程
- 面向链接的传输,即每次传输之前需要先建立一个链接
- 客户端和服务器端两个程序需要编写
- Server端的编写流程
1. 建立socket负责具体通信,这个socket其实只负责接受对方的请求,真正通信的是链接后从新建立的socket
2. 绑定端口和地址
3. 监听接入的访问socket
4. 接受访问的socket,可以理解接受访问即建立了一个通讯的链接通路
5. 接受对方的发送内容,利用接收到的socket接收内容
6. 如果有必要,给对方发送反馈信息
7. 关闭链接通路
8. 参看案例04
- Client端流程
1. 建立通信socket
2. 链接对方,请求跟对方建立通路
3. 发送内容到对方服务器
4. 接受对方的反馈
5. 关闭链接通路
6. 参看案例05
# 3. FTP编程
- FTP(FileTransferProtocal)文件传输协议
- 用途:定制一些特殊的上传下载文件的服务
- 用户分类,登录FTP服务器必须有一个账户
1. Real账户:注册账户
2. Guest账户:可能是临时的对某一类人的行为进行允许
3. Anonymous账户:匿名账户,允许任何人
- FTP工作流程
![](img/ftp01.png)
1. 客户端链接远程主机上的FTP服务器
2. 客户端输入用户名和密码(或者“anonymous”和电子邮件地址)
3. 客户端和服务器进行各种文件传输和信息查询操作
4. 客户端从远程FTP服务器退出,结束传输
- FTP文件表示
- 分三段表示FTP服务器上的文件
- HOST:主机地址,类似于 ftp.mozilla.org, 以ftp开头
- DIR:目录, 表示文件所在本地的路径,例如 pub/android/focus/1.1-RC1/
- File: 文件名称, 例如 Klar-1.1-RC1.apk
- 如果想完整精确表示ftp上某一个文件,需要上述三部分组合在一起
- 案例06
# 4. 邮件客户端
## 电子邮件的历史
- 起源
- 1969 Leonard K. 教授发给同事的 “LO”
- 1971 美国国防部资助的阿帕网(Arpanet)的通讯机制
- 通讯地址里用@(读作艾特),是因为这个符号比较生僻,不会出现在正常的名称中
- 1987年中国第一封电子邮件,
“Across the Great Wall we can reach every corner in the world"
- 管理程序
- Euroda使邮件飞入寻常百姓家
- Netscape和Outlook,Foxmail后来居上
- Hotmail使用浏览器收发邮件
- 参考资料
- [官网](https://docs.python.org/3/library/email.mime.html)
## 邮件工作流程
- laoshi@qq.com, 老师,北京海淀
- xuesheng@sina.com, 学生,上海江岸区
- MUA(MailUserAgent)邮件用户代理
- MTA(MailTransferAgent)用户传输代理
- MDA(MailDeliveryAgent)邮件投递代理
- 流程
1. MUA->MTA, 邮件已经在服务器上了
2. qq MTA->.........->sina MTA, 邮件在新浪的服务器上
3. sina MTA-> sina MDA, 此时邮件已经在你的邮箱里了
4. sina MDA -> MUA(Foxmail/Outlook), 邮件下载到本地电脑
- 编写程序过程
1. 发送: MUA->MTA with SMTP:SimpleMailTransferProtocal,包含MTA->MTA
2. 接受: MDA->MUA with POP3 and IMAP:PostOfficeProtocal v3 and InternetMessageAccessProtocal v4
- 准备工作
- 注册邮箱(以qq邮箱为例)
- 第三方邮箱需要特殊设置,以qq邮箱为例
- 进入设置中心
- 取得授权码
- Python for mail
- SMTP:负责发送邮件
1. email:构造邮件
- 纯文本邮件(案例07)
- 直接把邮件内容写入就好
- HTML格式邮件(案例08)
- 准备HTML代码作为邮件内容
- 把邮件是subtype修改为html
- 带附件的邮件(案例09)
- 看做是一个文本邮件和一个附件的合体
- 一封邮件如果涉及到多个部分,需要使用MIMEMultipart格式构建
- 添加一个MIMEText正文
- 添加一个MIMEBase或者MEMEText作为附件
- 添加邮件头,抄送等信息(案例10)
- 王大鹏<1366798119@qq.com>, 如果想让对方看到这种格式的邮件发送,需要用Header构建邮件头
- 同时,所有字符串形式的内容都需要编码
- mail["From"], 表示的是发送者信息,包括姓名和邮件地址
- mail['To'], 表示接受者信息,包括姓名和地址邮件
- mail['Subject'], 表示摘要或者主题信息
- 同时支持HTML/Text格式(案例11)
- 构建一个MIMEMultipart格式邮件
- MIMEMultipart邮件subtype为alternative格式
- HTML和Text个添加一个邮件
2. smtplib:发送邮件
- POP3(接受邮件)
- 本质上是MDA到MUA的一个过程
- 从 MDA下载下来的是一个完整的邮件结构体,需要解析才能得到每个具体可读的内容
- 步骤:
1. 用poplib下载邮件结构体原始内容
1. 准备相应的内容(邮件地址,密码,POP3实例)
2. 身份认证
3. 一般会先得到邮箱内邮件的整体列表
4. 根据相应序号,得到某一封信的数据流
5. 利用解析函数进行解析出相应的邮件结构体
2. 用email解析邮件的具体内容
- 案例12